﻿#ifndef UISIGTABLEVIEW_H
#define UISIGTABLEVIEW_H

#include <QTableView>
#include <QModelIndex>


/**
 * @class UiSigTableView
 * 
 * 自定义的QTableView类，用于提供额外的功能，比如自定义的右键菜单操作。
 */
class UiSigTableView:public QTableView
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数
     * 
     * @param parent 父QWidget对象
     */
    UiSigTableView(QWidget* parent);

protected:
    /**
     * @brief 处理鼠标按下事件，重写自QTableView
     *
     * @param event 鼠标事件对象
     */
    void mousePressEvent(QMouseEvent* event) override;

private slots:
    /**
     * @brief 触发删除信号的槽函数
     * 
     * 当选择项被右键点击，并选择删除操作时调用。
     */
    void slotMenuDeleteSig();

    /**
     * @brief 执行菜单项“复制”的信号处理。
     * 
     * 该函数没有参数和返回值，主要用于响应用户通过菜单触发的“复制”操作。
     */
    void slotMenuCopySig();

    /**
     * @brief 执行菜单项“粘贴”的信号处理。
     * 
     * 该函数没有参数和返回值，主要用于响应用户通过菜单触发的“粘贴”操作。
     */
    void slotMenuPasteSig();

    /**
     * @brief 执行菜单批量替换列的操作。
     * 
     * 该函数是一个信号槽函数，用于响应菜单项的触发，执行批量替换列的操作。此操作可能会涉及到表格数据的大量修改。
     * 
     * @param 无
     * @return 无
     */
    void slotMenuBatchReplaceCol();

    void slotMenuBatchIncrementCol();

    void slotMenuBatchAutoIncrement();


signals:
    /**
     * @brief 发送删除信号
     * 
     * @param dataList 要删除的数据列表
     * 
     * 该信号被slotMenuDeleteSig()槽函数触发，用于通知其他部件需要删除的数据项。
     */
    void sigDeleteSig(const QList<QSharedPointer<class IModel>>& dataList);

    /**
     * @brief sigCopySig 函数用于复制信号。
     * 
     * 该函数没有参数和返回值。它主要用于触发信号的复制操作。
     */
    void sigCopySig();

    /**
     * @brief sigPasteSig 函数用于粘贴信号。
     * 
     * 该函数没有参数和返回值。它主要用于触发信号的粘贴操作。
     */
    void sigPasteSig();

    /**
     * @brief 批量替换指定模型索引列的信号值
     * 
     * 该函数用于批量更新指定模型索引列的信号值，对于列表中的每个索引，将其对应列的信号值更新为给定的值。
     * 
     * @param indexList 模型索引列表，包含了需要更新信号值的项
     * @param value 要更新到的新值
     */
    void sigBatchReplaceColSig(QList<QModelIndex> indexList, const QVariant &value);

    void sigBatchIncrementColSig(QList<QModelIndex> indexList, const QVariant &value, int startIndex);

    void sigAppendData(QSharedPointer<IModel> data);

    void sigMenuEditDiscreteDesValue(quint32 discreteId);

private:
    //是否选中单行
    bool isSelectSingleRow();

// 类成员变量注释
private:
    // 自定义的右键菜单
    class QMenu* m_menu = nullptr;
    // 复制动作的菜单项
    class QAction* m_copyAction = nullptr;
    // 粘贴动作的菜单项
    class QAction* m_pasteAction = nullptr;
    // 删除动作的菜单项
    class QAction* m_deleteAction = nullptr;
    // 批量替换列内容的菜单项
    class QAction* m_batchReplaceColAction = nullptr;
    // 批量自增的菜单项
    class QAction* m_batchAutoIncrementAction = nullptr;
    // 批量自增列内容的菜单项
    class QAction* m_batchIncrementColAction = nullptr;
    // 编辑离散量数值菜单项
    class QAction* m_editDiscreteDesValueAction = nullptr;
    // 数据类型
};

#endif // UISIGTABLEVIEW_H
